var checkLogin = require('../middlewares/check').checkLogin;
var PostModel = require('../models/posts');
var CommentModel = require('../models/comments');

//get /posts 所有用户或者特定用户的文章页
// eg：GET /posts?author=xxx

module.exports = function (app) {
  //get /posts 所有用户或者特定用户的文章页 ,主页与用户页通过url中的author区分
  
  app.route('/posts')
    .get(function (req, res, next) {
      var author = req.query.author;

      PostModel.getPosts(author)
         .then(function (posts){
           res.render('posts',{
             posts: posts
           });
         })
         .catch(next);  
    })
    //POST /posts发表一篇文章
    .post(checkLogin, function (req, res, next) {
      var author = req.session.user._id;
      var title = req.fields.title;
      var content = req.fields.content;

      //校验参数
      try{
        if(!title.length){
          throw new Error('请填写标题');
        }
        if(!content.length){
          throw new Error('请填写内容');
        }
      }catch(e){
        req.flash('error', e.message);
        return res.redirect('back');
      }

      var post = {
        author: author,
        title: title,
        content: content,
        pv: 0
      };

      //数据插入数据库中
      PostModel.create(post)
           .then(function(result){
             //此post是插入mongodb后的值,包含_id
             post = result.ops[0];
             req.flash('success','发表成功');
             //发表成功后跳转到该文章页
             res.redirect(`/posts/${post._id}`);
           })
           .catch(next);
    });
  //get /posts/create 发表文章页
  app.route('/posts/create')
    .get(checkLogin, function (req, res, next) {
      res.render('create');
    });
  //get /posts/:postId 但对于一篇的文章页
  app.route('/posts/:postId')
    .get(function (req, res, next) {
       var postId = req.params.postId;
       
       Promise.all([
         PostModel.getPostById(postId),// 获取文章信息
         CommentModel.getComments(postId),//获取该文章的所有留言
         PostModel.incPv(postId) //pv 加 1
       ])
         .then(function(result){
           //返回文章信息
           var  post = result[0];
           var  comments = result[1];
           if(!post){
             throw new Error('该文章不存在');
           }

           res.render('post',{
             post: post,
             comments: comments
           });
         })
         .catch(next);
       
    });

  //get /posts/:postId/edit 更新文章页
  app.route('/posts/:postId/edit')
    .get(function (req, res, next) {
      var postId = req.params.postId;
      var author = req.session.user._id;

      PostModel.getRawPostById(postId)
        .then(function (post){
          if(!post){
            throw new Error('该文章不存在');
          }
          if(author.toString() !== post.author._id.toString()){
             throw new Error('权限不足');
          }
          res.render('edit',{
            post: post
          });
        })
        .catch(next);
    })
    .post(checkLogin, function (req, res, next) {
      var postId = req.params.postId;
      var author = req.session.user._id;
      var title = req.fields.title;
      var content = req.fields.content;

      PostModel.updatePostById(postId, author, {title: title, content: content})
          .then(function (){
            req.flash('success','编辑文章成功');

            //编辑文章成功后跳转到上一页
            res.redirect(`/posts/${postId}`);
          })
          .catch(next);
    });

  //GET /posts/:postId/remove 删除一篇文章
  app.route('/posts/:postId/remove')
      .get(checkLogin, function(req,res,next){
        var postId = req.params.postId;
        var author = req.session.user._id;

        PostModel.delPostById(postId,author)
           .then(function (){
             req.flash('success','删除文章成功');
             //删除成功后跳转到主页
             res.redirect('/posts');
           })
           .catch(next);
      });
  //post /posts/:postId/comment 创建一条留言
  app.route('/posts/:postId/comment')
    .post(checkLogin, function (req, res, next) {
      var author = req.session.user._id;
      var postId = req.params.postId;
      var content = req.fields.content;
      var comment = {
        author: author,
        postId: postId,
        content: content
      };

      CommentModel.create(comment)
         .then(function (){
           req.flash('success','留言成功');
           //留言成功后跳转到上一页
           res.redirect('back');
         })
         .catch(next);
    });
  //get /posts/:postId/comment/:commentId/remove 移除一条留言
  app.route('/posts/:postId/comment/:commentId/remove')
    .get(checkLogin, function (req, res, next) {
       var commentId = req.params.commentId;
       var author = req.session.user._id;

       CommentModel.delCommentById(commentId,author)
          .then(function (){
            req.flash('success','删除留言成功');
            //删除成功后跳转到上一页
            res.redirect('back');
          })
          .catch(next);
    });

}

